/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package BaseDatos;

import BaseDatos.GeneradorMySQL.AdministradorMySQL;
import Controladores.GestorMensajes;
import Modelo.Administrador;
import com.mysql.jdbc.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Administrador
 */
public class GestorAdministradoresBD {

////////////////////////////////////////////////////////////////////////////////
// Constructores
////////////////////////////////////////////////////////////////////////////////
    
    public GestorAdministradoresBD(){
        iniciarComponentes();
    }

////////////////////////////////////////////////////////////////////////////////
// Interfaz de la clase
////////////////////////////////////////////////////////////////////////////////

    /**
     * comprueba si existe el nombre de usuario y contrasena del adminsitrador
     * @param _nombreUsuario
     * @param _contrasena
     * @return nombre del administrador encontrado o nulo sino se encontro
     */
    public String existe(String _nombreUsuario, char[] _contrasena){
        iniciarConexionBD();
        return consultarAdministradorBD(_nombreUsuario, _contrasena);
    }
    
    /**
     * adminsitra el proceso de registro para el nuevo administrador en la base de datos
     * @param _administrador 
     */
    public void GestorRegistrosBD(Administrador _administrador){
        iniciarConexionBD();
        registrarAdministradorBD(_administrador);
    }
////////////////////////////////////////////////////////////////////////////////
// Metodos privados
////////////////////////////////////////////////////////////////////////////////

    private void iniciarComponentes(){
        constructorSentenciasMySQL = null;
    }

    /**
     * @param _instruccionMySQL
     * @return el nombre del administrador encontrado o nulo sino se encontro
     */
    private String consultarAdministradorBD(
     String _nombreUsuario, 
     char[] _contrasena
    ){
        
        String nombre = null;
        AdministradorMySQL administradorMySQL = new AdministradorMySQL();
        String instruccionMySQL = administradorMySQL.busqueda(_nombreUsuario, 
                _contrasena);
        
        try {
            ResultSet resultadoDeConsulta;    
            resultadoDeConsulta = constructorSentenciasMySQL.executeQuery(instruccionMySQL);
            
            while(resultadoDeConsulta.next()){
                nombre = resultadoDeConsulta.getString("Nombre");
            }
            
        } catch (SQLException log) {
            GestorMensajes mensaje = new GestorMensajes();
            mensaje.mensajeError(log, _nombreUsuario);
        }finally{
            terminarConexionBD();
        }
        return nombre;
    }
    
    /**
     * registra al nuevo administrador en la base de datos
     * @param _administrador 
     */
    private void registrarAdministradorBD(Administrador _administrador){
        AdministradorMySQL administradorMySQL = new AdministradorMySQL();
        String instruccionMySQL = administradorMySQL.registro(_administrador);
        GestorMensajes administradorMensajes = new GestorMensajes();
        try{
            constructorSentenciasMySQL.executeUpdate(instruccionMySQL);
            administradorMensajes.mensaje("Alta del nuevo administrador exitosa");
        }catch(SQLException log ){
            administradorMensajes.mensajeError(log, _administrador.obtenerNombre());
        }finally{
            terminarConexionBD();
        }
    }
    
    /**
     * Inicia una conexion con la base de datos
     */
    private void iniciarConexionBD(){
        GestorConexionBD conexionBD;
        conexionBD = GestorConexionBD.obtenerPermisosAdministradorConexion();
        constructorSentenciasMySQL = conexionBD.abrirConexionBD();
    }

    /**
     * termina la conexion con la base de datos
     */
    private void terminarConexionBD(){
        GestorConexionBD conexionBD;
        conexionBD = GestorConexionBD.obtenerPermisosAdministradorConexion();
        conexionBD.cerrarConexionBD();
    }
    
////////////////////////////////////////////////////////////////////////////////
// Declaracion de variables
////////////////////////////////////////////////////////////////////////////////
    
    private Statement constructorSentenciasMySQL;
}
